Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>JSX (JavaScript)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/JSX_(JavaScript)"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-JSX_JavaScript rootpage-JSX_JavaScript skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">JSX (JavaScript)</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr"><p><b>JSX</b> (<b>JavaScript Syntax Extension</b> et parfois appelé <b>JavaScript <a href="Extensible_Markup_Language" title="Extensible Markup Language">XML</a></b>) est une <a href="React" title="React">extension React</a> de la syntaxe du langage <a href="JavaScript" title="JavaScript">JavaScript</a> <sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> qui permet de structurer le rendu des composants à l'aide d'une syntaxe familière à de nombreux <a href="D%C3%A9veloppeur" title="Développeur">développeurs</a>. Il est similaire en apparence au <a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>.
</p><p>Les composants <a href="React" title="React">React</a> sont généralement écrits à l'aide de JSX, bien qu'ils ne soient pas obligés de l'être, car les composants peuvent également être écrits en JavaScript pur. JSX est similaire à une autre syntaxe d'extension créée par <a href="Facebook" title="Facebook">Facebook</a> pour <a href="PHP" title="PHP">PHP</a> appelée XHP.
</p>

<div class="mw-heading mw-heading2"><h2 id="Balisage">Balisage</h2></div>
<p>Un exemple de code JSX&nbsp;:
</p>
<div class="mw-highlight mw-highlight-lang-jsx mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="kd">const</span><span class="w"> </span><span class="nx">App</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="2"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span>
<span class="linenos" data-line="3"></span><span class="w"> </span><span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="linenos" data-line="4"></span><span class="w"> </span><span class="p">&lt;</span><span class="nt">p</span><span class="p">&gt;</span><span class="nx">En</span><span class="o">-</span><span class="nx">tête</span><span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
<span class="linenos" data-line="5"></span><span class="w"> </span><span class="p">&lt;</span><span class="nt">p</span><span class="p">&gt;</span><span class="nx">Contenu</span><span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
<span class="linenos" data-line="6"></span><span class="w"> </span><span class="p">&lt;</span><span class="nt">p</span><span class="p">&gt;</span><span class="nx">Pied</span><span class="w"> </span><span class="nx">de</span><span class="w"> </span><span class="nx">page</span><span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
<span class="linenos" data-line="7"></span><span class="w"> </span><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="linenos" data-line="8"></span><span class="w"> </span><span class="p">);</span><span class="w"> </span>
<span class="linenos" data-line="9"></span><span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Éléments_imbriqués"><span id=".C3.89l.C3.A9ments_imbriqu.C3.A9s"></span>Éléments imbriqués</h3></div>
<p>Plusieurs éléments du même niveau doivent être enveloppés dans un seul élément React tel que l'élément <code>&lt;div&gt;</code> illustré ci-dessus, un fragment délimité par <code>&lt;Fragment&gt;</code> ou sous sa forme abrégée <code>&lt;&gt;</code>, ou renvoyés sous forme de tableau<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup class="reference cite_virgule">,</sup><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Les_attributs">Les attributs</h3></div>
<p>JSX fournit une gamme d'attributs d'élément conçus pour refléter ceux fournis par HTML.
Des attributs personnalisés peuvent également être transmis au composant<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup>. Tous les attributs seront reçus par le composant en tant que propriétés.
</p><p>Quelques attributs particuliers des composants React&nbsp;:
</p>
<ul><li><code>className</code> est une propriété définissant la classe <a href="Feuilles_de_style_en_cascade" title="Feuilles de style en cascade">CSS</a>, correspondant à l'attribut HTML <code>class</code> mais renommé en <code>className</code> car <code>class</code> est un mot réservé en Javascript.</li>
<li><code>style</code> est une propriété définissant des règles de style CSS, comme en HTML mais définie obligatoirement sous forme d'un objet au lieu d'une <a href="Cha%C3%AEne_de_caract%C3%A8res" title="Chaîne de caractères">chaîne de caractères</a>. Les noms d'attribut correspondent aux noms des propriétés CSS en remplaçant le <a href="Tiret" title="Tiret">tiret</a> par la mise en majuscule de la lettre qui suit. Exemple&nbsp;: <code class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><span class="nx">style</span><span class="o">=</span><span class="p">{{</span><span class="w"> </span><span class="nx">fontWeight</span><span class="o">:</span><span class="s1">'bold'</span><span class="p">,</span><span class="w"> </span><span class="nx">fontSize</span><span class="o">:</span><span class="s1">'24pt'</span><span class="w"> </span><span class="p">}}</span></code></li>
<li><code>children</code> est une propriété contenant le tableau des éléments enfants contenus dans le composant.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Expressions_JavaScript">Expressions JavaScript</h3></div>
<p>Les <a href="Expression_(informatique)" title="Expression (informatique)">expressions</a> JavaScript (mais pas les instructions) peuvent être utilisées dans JSX avec des accolades <code>{}</code>&nbsp;:
</p>
<div class="mw-highlight mw-highlight-lang-html mw-content-ltr" dir="ltr"><pre><span></span> <span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>{10+1}<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</pre></div>
<p>L'exemple ci-dessus affichera&nbsp;:
</p>
<div class="mw-highlight mw-highlight-lang-html mw-content-ltr" dir="ltr"><pre><span></span> <span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>11<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Expressions_conditionnelles">Expressions conditionnelles</h3></div>
<p><a href="Instruction_conditionnelle_(programmation)" title="Instruction conditionnelle (programmation)">Les instructions If–else</a> ne peuvent pas être utilisées dans JSX, mais des expressions conditionnelles peuvent être utilisées à la place. L'exemple ci-dessous affichera le résultat de l'expression <code class="mw-highlight mw-highlight-lang-js mw-content-ltr" dir="ltr"><span class="p">{</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="mf">1</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="s1">'true'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="s1">'false'</span><span class="w"> </span><span class="p">}</span></code> comme la chaîne <code>'true'</code> car <code>i</code> vaut 1.
</p>
<div class="mw-highlight mw-highlight-lang-jsx mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="kd">const</span><span class="w"> </span><span class="nx">App</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="2"></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span>
<span class="linenos" data-line="3"></span>
<span class="linenos" data-line="4"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span>
<span class="linenos" data-line="5"></span><span class="w"> </span><span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="linenos" data-line="6"></span><span class="w"> </span><span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;{</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="mf">1</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="s1">'true'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="s1">'false'</span><span class="w"> </span><span class="p">}&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
<span class="linenos" data-line="7"></span><span class="w"> </span><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="linenos" data-line="8"></span><span class="w"> </span><span class="p">);</span>
<span class="linenos" data-line="9"></span><span class="p">}</span>
</pre></div>
<p>Ce qui précède affichera&nbsp;:
</p>
<div class="mw-highlight mw-highlight-lang-html mw-content-ltr" dir="ltr"><pre><span></span><span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>true<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</pre></div>
<p>Les fonctions et JSX peuvent être utilisés au conditionnel&nbsp;:
</p>
<div class="mw-highlight mw-highlight-lang-jsx mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="kd">const</span><span class="w"> </span><span class="nx">App</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="linenos" data-line="2"></span><span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">sections</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">,</span><span class="w"> </span><span class="mf">3</span><span class="p">];</span>
<span class="linenos" data-line="3"></span>
<span class="linenos" data-line="4"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">(</span>
<span class="linenos" data-line="5"></span><span class="w"> </span><span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="linenos" data-line="6"></span><span class="w"> </span><span class="p">{</span><span class="nx">sections</span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">n</span><span class="p">,</span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">(</span>
<span class="linenos" data-line="7"></span><span class="w"> </span><span class="c1">// 'key' est utilisé par react pour pister les items de la liste et leurs changements.</span>
<span class="linenos" data-line="8"></span><span class="w"> </span><span class="c1">// Chaque valeur 'key' doit être unique.</span>
<span class="linenos" data-line="9"></span><span class="w"> </span><span class="p">&lt;</span><span class="nt">div</span><span class="w"> </span><span class="na">key</span><span class="o">=</span><span class="p">{</span><span class="s2">"section-"</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">n</span><span class="p">}&gt;</span>
<span class="linenos" data-line="10"></span><span class="w"> </span><span class="nx">Section</span><span class="w"> </span><span class="p">{</span><span class="nx">n</span><span class="p">}</span><span class="w"> </span><span class="p">{</span><span class="nx">i</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="mf">0</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="p">&lt;</span><span class="nt">span</span><span class="p">&gt;(</span><span class="nx">first</span><span class="p">)&lt;/</span><span class="nt">span</span><span class="p">&gt;}</span>
<span class="linenos" data-line="11"></span><span class="w"> </span><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="linenos" data-line="12"></span><span class="w"> </span><span class="p">))}</span>
<span class="linenos" data-line="13"></span><span class="w"> </span><span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="linenos" data-line="14"></span><span class="w"> </span><span class="p">);</span>
<span class="linenos" data-line="15"></span><span class="p">}</span>
</pre></div>
<p>Ce qui précède affichera&nbsp;:
</p>
<div class="mw-highlight mw-highlight-lang-html mw-content-ltr" dir="ltr"><pre><span></span><span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>Section 1<span class="p">&lt;</span><span class="nt">span</span><span class="p">&gt;</span>(first)<span class="p">&lt;/</span><span class="nt">span</span><span class="p">&gt;&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>Section 2<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="p">&lt;</span><span class="nt">div</span><span class="p">&gt;</span>Section 3<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">div</span><span class="p">&gt;</span>
</pre></div>
<p>Le code écrit en JSX nécessite une conversion avec un outil tel que Babel avant de pouvoir être compris par les navigateurs Web<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>. Ce traitement est généralement effectué au cours d'un processus de création de logiciel avant le déploiement de l'application.
</p>
<div class="mw-heading mw-heading2"><h2 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h2></div>
<div class="references-small decimal" style=""><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text"><span class="ouvrage">«&nbsp;<a rel="nofollow" class="external text" href="https://facebook.github.io/jsx/"><cite style="font-style:normal;">Draft: JSX Specification</cite></a>&nbsp;», <span class="italique">JSX</span>, Facebook <small style="line-height:1em;">(consulté le <time class="nowrap" datetime="2018-04-07" data-sort-value="2018-04-07">7 avril 2018</time>)</small></span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text"><span class="ouvrage" id="Clark2017">Clark, «&nbsp;<a rel="nofollow" class="external text" href="https://reactjs.org/blog/2017/09/26/react-v16.0.html#new-render-return-types-fragments-and-strings"><cite style="font-style:normal;">React v16.0§New render return types: fragments and strings</cite></a>&nbsp;», <span class="italique">React Blog</span>, <time class="nowrap" datetime="2017-09-26" data-sort-value="2017-09-26">26 septembre 2017</time></span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a> </span><span class="reference-text"><span class="ouvrage">«&nbsp;<a rel="nofollow" class="external text" href="https://reactjs.org/docs/react-component.html#render"><cite style="font-style:normal;">React.Component: render</cite></a>&nbsp;», <span class="italique">React</span></span></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a> </span><span class="reference-text"><span class="ouvrage" id="Clark2017">Clark, «&nbsp;<a rel="nofollow" class="external text" href="https://reactjs.org/blog/2017/09/26/react-v16.0.html#support-for-custom-dom-attributes"><cite style="font-style:normal;">React v16.0§Support for custom DOM attributes</cite></a>&nbsp;», <span class="italique">React Blog</span>, <time class="nowrap" datetime="2017-09-26" data-sort-value="2017-09-26">26 septembre 2017</time></span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a> </span><span class="reference-text"><span class="ouvrage" id="Fischer2017"><span class="ouvrage" id="Ludovico_Fischer2017"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> Ludovico <span class="nom_auteur">Fischer</span>, <cite class="italique" lang="en">React for Real: Front-End Code, Untangled</cite>, Pragmatic Bookshelf, <time class="nowrap" datetime="2017-09-06" data-sort-value="2017-09-06">6 septembre 2017</time> <small style="line-height:1em;">(<a href="International_Standard_Book_Number" title="International Standard Book Number">ISBN</a>&nbsp;<span class="nowrap">9781680504484</span>, <a rel="nofollow" class="external text" href="https://books.google.com/books?id=Tg9QDwAAQBAJ">lire en ligne</a>)</small><span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=React+for+Real%3A+Front-End+Code%2C+Untangled&amp;rft.pub=Pragmatic+Bookshelf&amp;rft.aulast=Fischer&amp;rft.aufirst=Ludovico&amp;rft.date=2017-09-06&amp;rft.isbn=9781680504484&amp;rfr_id=info%3Asid%2Ffr.wikipedia.org%3AJSX+%28JavaScript%29"></span></span></span></span>
</li>
</ol></div>
</div>
<div class="mw-heading mw-heading2"><h2 id="Liens_externes">Liens externes</h2></div>
<ul><li><cite class="ouvrage" id="site_officiel" style="font-style: normal;"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="https://facebook.github.io/jsx/">Site officiel</a></cite></li></ul>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de l’informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-03-20" href="https://fr.wikipedia.org/wiki/?title=JSX_(JavaScript)&amp;oldid=224069276">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>